<?php
class design{
    //atributos
    var $men_error=NULL;
    var $menu;
    var $sub_menu;
    var $selec;
    var $sub_selec;    
    var $tituloSubmenu;
    
    function __construct()
    {
        $this->men_error="";
        $this->sub_selec="";    
        $this->menu="";
        $this->sub_menu="";
        $this->sub_selec="";    
        $this->tituloMenu="";
    }

/*******************************************************************************
 * SaberMenu()
 * Busca las entradas del menú en el directorio /proc
 ******************************************************************************/
    function SaberMenu(){
               /*Nombre de los los modulos /proc, si fueran otros modificar conf.php de cada modulo*/
               $this->selec=basename(getcwd())."/";//Para marcar la parte del menú seleccionada             
               $this->sub_selec=(defined('SUB_CAPTION'))? SUB_CAPTION : basename($_SERVER['PHP_SELF']);//Para marcar la parte del sub-menu seleccionada
               
                $directorios=opendir(RUTA_PHP."/proc");
                rewinddir($directorios);
                $i=0;
                 while($fichero = readdir($directorios)){                        
                        unset($Emenu);
                        unset($Esub_menu);                        
                        if(file_exists(RUTA_PHP.'/proc/'.$fichero.'/conf.php')){                            
                             require_once(RUTA_PHP.'/proc/'.$fichero.'/conf.php');
                             if(isset ($Emenu)){
                                 /*Comprobar permisos IMLEMENTAR EN EL FUTURO
                                 if($Emenu[2]==1&&$_SESSION['usr']['usr_admin']!=1){//Si no tiene permisos
                                        if(RUTA_PHP.$fichero==getcwd())
                                            header('Location: ../404.php');
                                        continue;
                                        }
                                 else{*/
                                     $this->menu[$i]=$Emenu;
                                     $i++;
                                     if($this->selec==$fichero."/")
                                     if(isset ($Esub_menu)){
                                         $this->sub_menu=$Esub_menu;
                                         $this->tituloSubmenu=$Emenu["titulo"];
                                     }
                                 //}
                             }
                        }
                }
    }

    
 /*******************************************************************************
 * IncFicheros($ficheros)
 * Incluye ficheros css y javaScript en el documento
 * @param String/Array $ficheros Fichero/s css o javaScript
 ******************************************************************************/
    function IncFicheros($ficheros){//detecta los ficheros que se le pasan (string o array) y incluye los ficheros sean .js o .css
        if(is_array($ficheros))//
            foreach ($ficheros as $fichero){
                if(preg_match('/.js$/', $fichero))
                        echo "<script type=\"text/javascript\" src=\"{$fichero}\"></script>";
                if(preg_match('/.css$/', $fichero))
                        echo '<link href="'.$fichero.'" rel="stylesheet" type="text/css" />';
            }
        elseif(is_string($ficheros)){//es string
            if(preg_match('/.js$/', $ficheros))
                    echo "<script type=\"text/javascript\" src=\"{$ficheros}\"></script>";
            if(preg_match('/.css$/', $ficheros))
                    echo '<link href="'.$ficheros.'" rel="stylesheet" type="text/css" />';

       }

    }
    
 /*******************************************************************************
 * Head($ficheros=0) Imprime la cabecera
 * Imprime la cabecera llamando al metodo IncFicheros() si se le pasa algun 
 * fichero para incluir.
 * 
 * @param String/Array $ficheros Fichero/s css o javaScript
 ******************************************************************************/
    function Head($ficheros=0){
        echo'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml">
                <head>
                <script type="text/javascript" src="'.RUTA_HTML.'/js/jquery-1.7.2.min.js"></script>                
                ';

                if($ficheros)
                    $this->IncFicheros($ficheros);
                echo'                
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <!--PARA EVITAR CACHE-->
                <meta http-equiv="Expires" content="0"/>
                <meta http-equiv="Last-Modified" content="0"/>
                <meta http-equiv="Cache-Control" content="no-cache, mustrevalidate"/>
                <meta http-equiv="Pragma" content="no-cache"/>
                <title>'.TITULO.'</title>
                <link href="'.RUTA_HTML.'/css/general.css" rel="stylesheet" type="text/css" />';
                /*Otras librerias comunes a toda la aplicación*/    
                $librerias=array(
                    RUTA_HTML."/lib/flexigrid/flexigrid.css",
                    RUTA_HTML."/lib/flexigrid/flexigrid.pack.css",                    
                    RUTA_HTML."/css/smoothness/jquery-ui-1.8.22.custom.css",
                    RUTA_HTML."/lib/flexigrid/flexigrid.js",
                    RUTA_HTML."/lib/flexigrid/flexigrid.pack.js",                                       
                    RUTA_HTML."/js/jquery-ui-1.8.22.custom.min.js",
                );
                $this->IncFicheros($librerias);                                
                echo '</head>';
    }

 /*******************************************************************************
 * Menu() Imprime el menú principal
 * Imprime el menú principal, requiere haber llamado al metodo SaberMenu()
 *  
 ******************************************************************************/
    
    function Menu(){
                if(isset ($this->menu)){                   
                     echo '<div id="menu"><ul>';
                        foreach ($this->menu as $opc)
                            if($opc["directorio"]!='opc'&&$opc["directorio"]!='.'&&$opc["directorio"]!='..'){
                                if($this->selec==$opc["directorio"])
                                    echo "<li ><a class='selec' href='".RUTA_HTML."/proc/".$opc["directorio"]."index.php'><span>".$opc["titulo"]."</span></a></li>\n";
                                 else
                                    echo"<li><a href='".RUTA_HTML."/proc/".$opc["directorio"]."index.php'><span>".$opc["titulo"]."</span></a></li>\n";
                            }
                }
                echo '</ul>';                
                echo "<img class='cargando' src='".RUTA_HTML."/css/img/cargando.gif' alt='cargando' />";
                /*Caja seleccion de idioma*/
                    echo "<div class='idiomas'>";
                        echo '<a href="'.RUTA_HTML.'/lib/lang.php?i=en&f='.$_SERVER["PHP_SELF"].'"><img src="'.RUTA_HTML.'/css/img/gb.png"/></a>';
                        echo '<a href="'.RUTA_HTML.'/lib/lang.php?i=es&f='.$_SERVER["PHP_SELF"].'"><img src="'.RUTA_HTML.'/css/img/es.png"/></a>';
                    echo '</div>';                    
                echo '</div>';                


    }
 /*******************************************************************************
 * Menu() Imprime el sub-menú en arbol
 * Imprime el sub-menú en arbol, requiere haber llamado al metodo SaberMenu()
 * y tener incluido los siguiente ficheros con el método ficheros IncFicheros():
 * ->"/css/jquery.treeview.css"
 * ->"/js/jquery.treeview.js"
 * ->"/js/general.js"
 *  
 ******************************************************************************/
   function SubMenu($entradas){
       foreach ($entradas as $entrada){
           $tipo=(is_array($entrada["tipo"]))?"folder":"file";           
           echo "\n<li><a rel='{$entrada["enlace"]}' href='#' ><span ";
           if($entrada["icono"])
               echo "style=' background: url({$entrada["icono"]})  0 0 no-repeat;' ";
           echo " class='{$tipo}' >{$entrada["titulo"]}</span></a>";                                   
           if(is_array($entrada["tipo"])){
               echo "<ul>";
               $this->SubMenu($entrada["tipo"]);               
               echo "</ul>";
           }    
           echo "</li>\n";           
       }
           /* Ejemplo funcional completo echo '         
		<li><span class="folder">Folder 1</span>
			<ul>
				<li><span style=" background: url(../../css/imgtreeview/folder.gif) 0 0 no-repeat;" class="file">Item 1.1</span></li>
			</ul>
		</li>
		<li><span class="folder">Folder 2</span>
			<ul>
				<li><span class="folder">Subfolder 2.1</span>
					<ul id="folder21">
						<li><span class="file">File 2.1.1</span></li>
						<li><span class="file">File 2.1.2</span></li>
					</ul>
				</li>
				<li><span class="file">File 2.2</span></li>
			</ul>
		</li>
		<li class="closed"><span class="folder">Folder 3 (closed at start)</span>
			<ul>
				<li><span class="file">File 3.1</span></li>
			</ul>
		</li>
		<li><span class="file">File 4</span></li>
	';*/
                    

    }        
 /*******************************************************************************
 * Cab($ficheros=0) Imprime toda la cabecera de la web
 * Imprime la cabecera de la web incluyendo los ficheros css y javaScript
 * Imprime el menú y submenú dejando abierto el <div> contenedor, el <body> y el <html>
 * el método Pie() cierra las anteriores etiquetas
 *  
 * @param String/Array $ficheros Fichero/s css o javaScript
 *  
 ******************************************************************************/    
    function Cab($ficheros=0){
                $this->SaberMenu();
                $this->Head($ficheros);
                echo'
                <body>
                <div class="contenedor">';
                $this->Menu();
                if($this->sub_menu){
                    echo '<div id="sub-menu">';
                    if($this->tituloSubmenu)
                        echo "<h1>{$this->tituloSubmenu}</h1>\n";
                    echo '<ul class="filetree">';
                    $this->SubMenu($this->sub_menu);
                    echo '</ul></div>';
                }
    }
  /*******************************************************************************
 * function Mensaje($tipo="ERROR",$mensaje="") Imprume mensaje
 * Imprime un mensaje con el tipo de error y el mensaje pasado por parámetro 
 * 
 * @param String $tipo ERROR/INFORMACION/EXITO/ALERTA por defecto ERROR
 *  
 ******************************************************************************/  
    function Mensaje($tipo="ERROR",$mensaje=""){
        $tipo=  strtoupper($tipo);
        $mensaje=($mensaje)?$mensaje:"<br/>";
        switch ($tipo){        
            case "INFORMACION":echo "<div class='informacion'>{$mensaje}</div>";
                break;
            case "EXITO":echo "<div class='exito'>{$mensaje}</div>";
                break;
            case "ALERTA":echo "<div class='alerta'>{$mensaje}</div>";
                break;
            default: echo "<div class='error'>{$mensaje}</div>";
                break;        
    }    
        
        
    }
    function ErrorGrave($mensaje){
                $this->Cab();

                echo "<div id=\"contenido\">";

                    echo "<p class=\"error_g\">{$mensaje} <a href=\"javascript:window.history.back();\">&laquo; Volver atr&aacute;s</a></p>";


                echo "</div>";

                $this->Pie();
    }
    /*Fin metodos para errores*/

    /*Otros metodos*/
    function Pie(){

                echo "<div id='pie'>";                
                //echo "<p>Panel para la gesti&oacute;n del sistema</p>";

                 echo "</div>";
                 echo "</div>";
                 echo "</body>";
                 echo "</html>";
    }
  
 
    /*Mensaje a mostrar para las partes en construcción*/
    function Construccion(){
        $this->cab();
        echo "<h1 style='text-align:center; padding:50px; color:#FF0000;'>En construcción</h1>";
        $this->Pie();
        die();


    }
    
 /*******************************************************************************
 * tabla($ficheros=0) Imprime una tabla flexigrid
 * Imprime una tabla flexigrid recibiendo por parámetro la url de los registros, los campos, botones y funciones de botones 
 *  
 * @param String $url url del fichero que devolverá un json para cargar en la tabla
 * @param Array $campos array de arrays con todos los campos que contendrá la tabla ejemplo:
 *       $campos[]=array(//Login
 *          "display" =>"Login",
 *          "name" =>"Login",
 *          "width" =>"100",
 *          "align" =>"left"
 *      );
 *      $campos[]=array(
 *          "display" =>"Nombre",
 *          "name" =>"Nombre",
 *          "width" =>"150",
 *          "align" =>"left"
 *      );
 * @param Array $botones array de arrays con los botones de la tabla ejemplo:
 *     $botones[]=array(
 *          "name" => "Agregar",
 *          "bclass" => "useradd",//clase en fichero usr.css
 *          "onpress" => "doAdd"//funcion en fichero usr.js pasado por parametro a la funcion        
 *      );
 *      $botones[]=array(
 *          "name" => "Eliminar",
 *           "bclass" => "delete",//clase en fichero usr.css
 *           "onpress" => "doDelete"//funcion en fichero usr.js pasado por parametro a la funcion        
 *       );
 * @param String $fileBotones url del fichero que contiene las funciones llamadas por los botones
 * 
 ******************************************************************************/    
    
    function Tabla($url,$campos,$botones,$fileBotones){                        
        $this->IncFicheros($fileBotones);        
        echo "<script>";        
        echo "$(function() {
        $(\"#flex\").flexigrid({
                url: '{$url}',
                dataType: 'json',
                colModel : [";                  
                        $mostrar="";
                        foreach ($campos as $campo){
                            $mostrar.="{display:'{$campo["display"]}', name : '{$campo["name"]}', width : {$campo["width"]}, sortable : true, align: '{$campo["align"]}'},";                          
                            if(!isset($sortname))
                                $sortname=$campo["name"];
                        }
                        rtrim($mostrar,",");
                        echo $mostrar;
                echo "],";
                
                echo "buttons : [";
                        $mostrar="";
                        foreach ($botones as $boton)
                        {
                            if($boton=="Separator")
                                $mostrar.="{separator: true},";
                            else
                                $mostrar.="{name: '{$boton["name"]}', bclass: '{$boton["bclass"]}', onpress : {$boton["onpress"]}},";                            
                        }
                        rtrim($mostrar,",");
                        echo $mostrar;               
                echo "],
                searchitems : [";
                        $mostrar="";
                        foreach ($campos as $campo){
                            $mostrar.="{display: '{$campo["display"]}', name:'{$campo["name"]}'},";
                        }
                        rtrim($mostrar,",");
                    echo $mostrar;
		echo "],
                sortname: '{$sortname}',
                sortorder: \"asc\",
                usepager: true,
                title: \"\",
                pageTitle:'otro',
                useRp: false,
                rp: 20,
                showTableToggleBtn: false,
                resizable: false,
                //width:\"undefined\",
                height: 480,
                singleSelect: true
                
        });
});
 </script>
 ";
                
    }
    
   

    }
?>
